1 module mruby.proc; 2 3 import mruby.mrb_class; 4 import mruby.object; 5 import mruby.value; 6 import mruby.khash; 7 import mruby; 8 9 extern (C): 10 11 alias kh_mt kh_mt_t; 12 13 struct REnv 14 { 15 enum mrb_vtype 16 { 17 MRB_TT_FALSE = 0, 18 MRB_TT_FREE = 1, 19 MRB_TT_TRUE = 2, 20 MRB_TT_FIXNUM = 3, 21 MRB_TT_SYMBOL = 4, 22 MRB_TT_UNDEF = 5, 23 MRB_TT_FLOAT = 6, 24 MRB_TT_CPTR = 7, 25 MRB_TT_OBJECT = 8, 26 MRB_TT_CLASS = 9, 27 MRB_TT_MODULE = 10, 28 MRB_TT_ICLASS = 11, 29 MRB_TT_SCLASS = 12, 30 MRB_TT_PROC = 13, 31 MRB_TT_ARRAY = 14, 32 MRB_TT_HASH = 15, 33 MRB_TT_STRING = 16, 34 MRB_TT_RANGE = 17, 35 MRB_TT_EXCEPTION = 18, 36 MRB_TT_FILE = 19, 37 MRB_TT_ENV = 20, 38 MRB_TT_DATA = 21, 39 MRB_TT_FIBER = 22, 40 MRB_TT_MAXDEFINE = 23 41 } 42 mrb_vtype tt; 43 uint color; 44 uint flags; 45 RClass* c; 46 RBasic* gcnext; 47 mrb_value* stack; 48 mrb_sym mid; 49 ptrdiff_t cioff; 50 } 51 52 struct RProc 53 { 54 enum mrb_vtype 55 { 56 MRB_TT_FALSE = 0, 57 MRB_TT_FREE = 1, 58 MRB_TT_TRUE = 2, 59 MRB_TT_FIXNUM = 3, 60 MRB_TT_SYMBOL = 4, 61 MRB_TT_UNDEF = 5, 62 MRB_TT_FLOAT = 6, 63 MRB_TT_CPTR = 7, 64 MRB_TT_OBJECT = 8, 65 MRB_TT_CLASS = 9, 66 MRB_TT_MODULE = 10, 67 MRB_TT_ICLASS = 11, 68 MRB_TT_SCLASS = 12, 69 MRB_TT_PROC = 13, 70 MRB_TT_ARRAY = 14, 71 MRB_TT_HASH = 15, 72 MRB_TT_STRING = 16, 73 MRB_TT_RANGE = 17, 74 MRB_TT_EXCEPTION = 18, 75 MRB_TT_FILE = 19, 76 MRB_TT_ENV = 20, 77 MRB_TT_DATA = 21, 78 MRB_TT_FIBER = 22, 79 MRB_TT_MAXDEFINE = 23 80 } 81 mrb_vtype tt; 82 uint color; 83 uint flags; 84 RClass* c; 85 RBasic* gcnext; 86 union 87 { 88 mrb_irep* irep; 89 mrb_func_t func; 90 } 91 RClass* target_class; 92 REnv* env; 93 } 94 95 struct kh_mt 96 { 97 khint_t n_buckets; 98 khint_t size; 99 khint_t n_occupied; 100 ubyte* ed_flags; 101 mrb_sym* keys; 102 RProc** vals; 103 } 104 105 RProc* mrb_proc_new (mrb_state*, mrb_irep*); 106 RProc* mrb_closure_new (mrb_state*, mrb_irep*); 107 RProc* mrb_proc_new_cfunc (mrb_state*, mrb_func_t); 108 RProc* mrb_closure_new_cfunc (mrb_state* mrb, mrb_func_t func, int nlocals); 109 void mrb_proc_copy (RProc* a, RProc* b); 110 mrb_value mrb_f_send (mrb_state* mrb, mrb_value self); 111 RProc* mrb_proc_new_cfunc_with_env (mrb_state*, mrb_func_t, mrb_int, const(mrb_value)*); 112 mrb_value mrb_proc_cfunc_env_get (mrb_state*, mrb_int); 113 void kh_alloc_mt (mrb_state* mrb, kh_mt_t* h); 114 kh_mt_t* kh_init_mt_size (mrb_state* mrb, khint_t size); 115 kh_mt_t* kh_init_mt (mrb_state* mrb); 116 void kh_destroy_mt (mrb_state* mrb, kh_mt_t* h); 117 void kh_clear_mt (mrb_state* mrb, kh_mt_t* h); 118 khint_t kh_get_mt (mrb_state* mrb, kh_mt_t* h, mrb_sym key); 119 khint_t kh_put_mt (mrb_state* mrb, kh_mt_t* h, mrb_sym key, int* ret); 120 void kh_resize_mt (mrb_state* mrb, kh_mt_t* h, khint_t new_n_buckets); 121 void kh_del_mt (mrb_state* mrb, kh_mt_t* h, khint_t x); 122 kh_mt_t* kh_copy_mt (mrb_state* mrb, kh_mt_t* h);